#pragma once

class EffectXAPO
{
public:
	EffectXAPO(IXAudio2SourceVoice* pVoice, WAVEFORMATEXTENSIBLE* pWfx);
	virtual ~EffectXAPO(void);

	virtual HRESULT apply(void) = (0);

	virtual bool GetEffectState(void);
	virtual void EnableEffect(void);
	virtual void DisableEffect(void);

	void SetEffectNumber(int num) { EffectNumber = num; }
	int GetEffectNumber(void) { return EffectNumber; }

	virtual XAUDIO2_EFFECT_DESCRIPTOR* GetEffectDescriptor(void);

protected:
	
	IUnknown * pXAPO;
	IXAudio2SourceVoice* pSourceVoice;
	XAUDIO2_EFFECT_DESCRIPTOR descriptor;
	WAVEFORMATEXTENSIBLE* pWfx;
	
private:
	int EffectNumber;	
};
